home *** CD-ROM | disk | FTP | other *** search
- function PROT_TRTable(name) {
- this.debugZone = "trtable";
- this.enchashDecrypter_ = new PROT_EnchashDecrypter();
- var components = name.split("-");
- if (components.length != 3)
- throw new Error("TRTables have names like name-function-type");
- var handlerTable = {
- "domain" : this.lookupDomain_,
- "enchash" : this.lookupEnchash_,
- "url" : this.lookupURL_,
- "text" : this.lookupText_
- };
- this.find = handlerTable[components[2]];
- if (!this.find)
- throw new Error("Unknown table type: " + components[2]);
- this.name_ = name;
- this.dbTable_ = Cc["@google.com/tableservice;1"]
- .getService(Ci.GTBITableService);
- }
- PROT_TRTable.prototype.find_ = function(key) {
- return this.dbTable_.exists(this.name_, key);
- }
- PROT_TRTable.prototype.insert = function(key, value) {
- return this.dbTable_.insert(this.name_, key, value);
- }
- PROT_TRTable.prototype.erase = function(key) {
- return this.dbTable_.remove(this.name_, key);
- }
- PROT_TRTable.prototype.lookupText_ = function(key) {
- G_Debug(this, "looking up " + key + " in " + this.name_);
- return this.find_(key);
- }
- PROT_TRTable.prototype.lookupURL_ = function(url) {
- var canonicalized = PROT_URLCanonicalizer.canonicalizeURL_(url);
- return this.find_(canonicalized);
- }
- PROT_TRTable.prototype.lookupDomain_ = function(url) {
- var canonicalized = PROT_URLCanonicalizer.canonicalizeURL_(url);
- var urlObj = Cc["@mozilla.org/network/standard-url;1"]
- .createInstance(Ci.nsIURL);
- urlObj.spec = canonicalized;
- var host = urlObj.host;
- var hostComponents = host.split(".");
- var path = urlObj.filePath;
- var pathComponents = path.split("/");
- for (var i = 0; i < hostComponents.length - 1; i++) {
- host = hostComponents.slice(i).join(".");
- var val = this.find_(host);
- if (val)
- return val;
- if (pathComponents.length >= 2 && pathComponents[1].length > 0) {
- host = host + "/" + pathComponents[1];
- var val = this.find_(host);
- if (val)
- return val;
- }
- }
- return undefined;
- }
- PROT_TRTable.prototype.lookupEnchash_ = function(url) {
- var host = this.enchashDecrypter_.getCanonicalHost(url);
- for (var i = 0; i < PROT_EnchashDecrypter.MAX_DOTS + 1; i++) {
- var key = this.enchashDecrypter_.getLookupKey(host);
- var encrypted = this.find_(key);
- if (encrypted && encrypted.length) {
- G_Debug(this, "Enchash DB has host " + host + " (key: " + key + ")");
- var decrypted = this.enchashDecrypter_.decryptData(encrypted, host);
- var res = this.enchashDecrypter_.parseRegExps(decrypted);
- for (var j = 0; j < res.length; j++) {
- if (res[j].test(url))
- return true;
- }
- }
- var index = host.indexOf(".");
- if (index == -1)
- break;
- host = host.substring(index + 1);
- }
- return undefined;
- }
- function TEST_PROT_TRTable() {
- if (G_GDEBUG) {
- var z = "trtable UNITTEST";
- G_debugService.enableZone(z);
- G_Debug(z, "Starting");
- var url = "http://www.yahoo.com?foo=bar";
- var url2 = "http://168.188.99.26/.secure/www.ebay.com/";
- var urlTable = new PROT_TRTable("test-foo-url");
- urlTable.insert(url, "1");
- urlTable.insert(url2, "1");
- G_Assert(z, urlTable.find(url) == "1", "URL lookups broken");
- G_Assert(z, urlTable.find(url2) == "1", "URL lookups broken");
- G_Assert(z, urlTable.find("http://%31%36%38%2e%31%38%38%2e%39%39%2e%32%36/%2E%73%65%63%75%72%65/%77%77%77%2E%65%62%61%79%2E%63%6F%6D/")
- == "1", "Canonicalized URL lookup broken");
- G_Assert(z, !urlTable.find("about:config"), "about:config breaks domlook");
- var dom1 = "bar.com";
- var dom2 = "amazon.co.uk";
- var dom3 = "127.0.0.1";
- var domainTable = new PROT_TRTable("test-foo-domain");
- domainTable.insert(dom1, "1");
- domainTable.insert(dom2, "1");
- domainTable.insert(dom3, "1");
- G_Assert(z, domainTable.find("http://www.bar.com/?zaz=asdf#url") == "1",
- "Domain lookups broken (single dot)");
- G_Assert(z, domainTable.find("http://www.amazon.co.uk/?z=af#url") == "1",
- "Domain lookups broken (two dots)");
- G_Assert(z, domainTable.find("http://127.0.0.1/?z=af#url") == "1",
- "Domain lookups broken (IP)");
- G_Assert(z, domainTable.find("http://%31%32%37%2e%30%2e%30%2e%31/?z=af#url") == "1",
- "Canonicalized domain lookups broken (IP)");
- domainTable.insert("foo.com/path", "1");
- G_Assert(z, !domainTable.find("http://www.foo.com/?zaz=asdf#url"),
- "Domain lookups broken (path mismatch)");
- G_Assert(z, domainTable.find("http://www.foo.com/path?zaz=asdf#url") == "1",
- "Domain lookups broken (path match)");
- G_Assert(z, domainTable.find("http://www.foo.com/path/more?zaz=asdf#url") == "1",
- "Domain lookups broken (long path match)");
- G_Debug(z, "PASSED");
- }
- }
-